/*
以下是带头结点的情况
*/
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>

typedef struct Node
{
    int data;
    struct Node *next;
} Node, *LinkList;

// 初始化一个空的单链表(带头节点)
bool InitList(LinkList &L)
{
    L = (Node *)malloc(sizeof(Node)); // 分配一个头节点
    if (L == NULL)                    // 内存不足，分配失败
    {
        return false;
    }
    L->next = NULL; // 头节点之后还没有结点
    return true;
}

bool Empty(LinkList &L)
{
    if (L->next == NULL)
    {
        return true;
    }
    else
    {
        return false;
    }
}

// 在第i个位置插入数据e
bool InsertList(LinkList &L, int i, int e)
{
    if (i < 1)
    {
        return false;
    }
    Node *p;   // 指针p指向当前扫描到的结点
    int j = 0; // 当前p指向的是第几个结点(因为有头节点，头结点可以视为0)
    p = L;     // L为头指针，头指针指向头结点，头结点不包含任何数据
    while (p != NULL && j < i - 1)
    {
        p = p->next;
        j++;
    }
    if (p == NULL)
    {
        return false;
    }
    Node *s = (Node *)malloc(sizeof(Node *));
    s->data = e;
    s->next = p->next;
    p->next = s;
    return true;
}

void test()
{
    LinkList L;

    InitList(L);
}

int main()
{
    test();
    return 0;
}